/* 
 * camera.c
 */
#include <system.h>
#include <v93.h>
#include <farl.h>
#include <agl.h>
#include "common.h"
#include "spec.h"
#include "vardecl.h"
#include "math.h"
/*
 * spec.h 内の
 * #define DOUBLEVIEW
 * #undef BIRDVIEW をそれぞれ、undef,defineにすると
 * ２プレイヤーモード時に上から見下ろしたモードになります。
 * 両方 define にしてはいけません。
 */
/* 
========================================
  カメラ関係

  引数
  int which;        PLAYERn の視点に移動
========================================
*/
void
SetCamera(int which)
{
#ifdef DOUBLEVIEW
  register machine *mp;

  mp = &Machine[which];

  AGLResetCamera();                /* カメラマトリクス初期化 */
  /* カメラ位置移動 */
  AGLTranslateCamera(FarlFix187(Locate[which][LX]), 
                     FarlFix187(Locate[which][LY]), 
//                     FarlFix187(Locate[which][LZ]));
                      0);
  /* カメラ向き計算 */
  if(mp->direct >= 1800)
    AGLRotateCameraZ(mp->direct - 1800);
  else
    AGLRotateCameraZ(mp->direct + 1800);
  AGLRotateCameraX(CAM_ANGLE);
  AGLTranslateCamera(0, 0x10, -0x10); /* カメラ位置再調整 */
  AGLPerspectiveCamera(0xffc0 * SCALE_PERS);
  AGLZoomCamera(CAM_ZOOM, CAM_ZOOM, 0x20);
#endif

#ifdef BIRDVIEW
  /*
   * 1P vs 2P 対戦時
   */
  float x, y, dx, dy, dist;
  static float yd = 3.5;
  static float zd = 4.4;
  static int rot = 0;
  
  AGLResetCamera();                /* カメラマトリクス初期化 */
  /* カメラ位置移動 */
  x = (Locate[PLAYER1][LX] + Locate[PLAYER2][LX]) / 2;
  y = (Locate[PLAYER1][LY] + Locate[PLAYER2][LY]) / 2;
  dx = Locate[PLAYER1][LX] - Locate[PLAYER2][LX];
  dy = Locate[PLAYER1][LY] - Locate[PLAYER2][LY];
  dist = sqrt(dx * dx + dy * dy);
  
  AGLTranslateCamera(FarlFix187(x),
                     FarlFix187(y),
                     FarlFix187(4.4 * dist)
                     );
  AGLPerspectiveCamera(0xffc0 * SCALE_PERS);
  AGLZoomCamera(CAM_ZOOM, CAM_ZOOM, 0x20);
#endif
}
